# CONFIGURACION
################

# Extensión de los archivos a compilar (c para C, cpp o cc o cxx para C++).
extension = cpp

# Descomentar si se quiere ver como se invoca al compilador
verbose = si

# CONFIGURACION "AVANZADA"
###########################

# Opciones para el compilador C/C++ en modo ansi.
CFLAGS = -Wall -pedantic -pedantic-errors

# Para que explote lo mas posible
CFLAGS += -O3 -DNDEBUG

# Para valgrind o debug
CFLAGS += -ggdb -DDEBUG -fno-inline -g

# Estandar de C a usar
CSTD = c99

# Estandar de C++ a usar
CXXSTD = c++98

# Pongo flags de C para C++ también
CXXFLAGS += $(CFLAGS)

CXXFLAGS += -std=$(CXXSTD)
LD = $(CXX)

occ := $(CC)
ocxx := $(CXX)
orm := $(RM)
old := $(LD)
ifdef verbose
RM := $(RM) -v
else
CC =  @echo "  CC  $@"; $(occ)
CXX = @echo "  CXX $@"; $(ocxx)
RM =  @echo "  CLEAN"; $(orm)
LD =  @echo "  LD  $@"; $(old)
endif

CLIENT = clienteNumerador
SERVER = numerador

SOURCES_CLNT.c =  
SOURCES_CLNT.h = 
SOURCES_SVC.c = 
SOURCES_SVC.h = 
SOURCES.x = numerador.x

TARGETS_CLNT.c = numerador_clnt.c numerador_xdr.c numerador_client.c utilsClientes.c 
TARGETS_SVC.c = numerador_svc.c numerador_server.c numerador_xdr.c 
TARGETS = numerador.h numerador_xdr.c numerador_clnt.c numerador_svc.c \
numerador_client.c numerador_server.c

OBJECTS_CLNT = $(SOURCES_CLNT.c:%.c=%.o) $(TARGETS_CLNT.c:%.c=%.o)
OBJECTS_SVC = $(SOURCES_SVC.c:%.c=%.o) $(TARGETS_SVC.c:%.c=%.o)

CFLAGS += -g 
LDLIBS += -lnsl
RPCGENFLAGS = 

# REGLAS
#########

.PHONY: all clean

all: $(SERVER) $(CLIENT) 
#launcherNumerador launcherClientes launcherVendedores terminator cliente vendedor \
#canalEntradaCliente canalSalidaCliente canalEntradaVendedor canalSalidaVendedor creadorCanalesCliente \
#servidorVendedorEntrada servidorVendedorSalida 

# RPC
$(TARGETS) : $(SOURCES.x) 
	rpcgen $(RPCGENFLAGS) $(SOURCES.x)

$(OBJECTS_CLNT) : $(SOURCES_CLNT.c) $(SOURCES_CLNT.h) $(TARGETS_CLNT.c) 
$(OBJECTS_SVC) : $(SOURCES_SVC.c) $(SOURCES_SVC.h) $(TARGETS_SVC.c) 

$(CLIENT) : $(OBJECTS_CLNT) 
	$(LINK.c) -o $(CLIENT) $(OBJECTS_CLNT) $(LDLIBS) 

$(SERVER) : $(OBJECTS_SVC) 
	$(LINK.c) -o $(SERVER) $(OBJECTS_SVC) $(LDLIBS)


clean:
	@$(RM) -fv *.o launcherNumerador launcherClientes launcherVendedores terminator cliente vendedor canalEntradaCliente canalSalidaCliente canalEntradaVendedor canalSalidaVendedor creadorCanalesCliente servidorVendedorEntrada servidorVendedorSalida Comunicacion/*.o Socket/*.o IPC/MessageQueue/*.o IPC/Semaphore/*.o IPC/SharedMemory/*.o Numerador/*.o $(SERVER) $(CLIENT)

